<?php

/**
 * @author     bigface.cc
 * @date       2012-7-8 
 * @version    1.0
 */
//商品采集控制器
class items_collectAction extends baseAction {

        public function index() {
                $items_site_mod = D('items_site');
                import("ORG.Util.Page");
                $count = $items_site_mod->count();
                $p = new Page($count, 20);
                $sites_list = $items_site_mod->limit($p->firstRow . ',' . $p->listRows)->select();
                $key = 1;
                foreach ($sites_list as $k => $val) {
                        $sites_list[$k]['key'] = ++$p->firstRow;
                }
                $page = $p->show();
                $this->assign('page', $page);
                $this->assign('sites_list', $sites_list);
                $big_menu = array('javascript:window.top.art.dialog({id:\'add\',iframe:\'?m=items_collect&a=add\', title:\'添加来源\', width:\'500\', height:\'250\', lock:true}, function(){var d = window.top.art.dialog({id:\'add\'}).data.iframe;var form = d.document.getElementById(\'dosubmit\');form.click();return false;}, function(){window.top.art.dialog({id:\'add\'}).close()});void(0);', '添加来源');
                $this->assign('big_menu', $big_menu);
                $this->display();
        }

        public function add() {
                if (isset($_POST['dosubmit'])) {
                        $data['name'] = isset($_POST['name']) && trim($_POST['name']) ? trim($_POST['name']) : $this->error('请填写来源名称');
                        $data['alias'] = isset($_POST['alias']) && trim($_POST['alias']) ? trim($_POST['alias']) : $this->error('请填写唯一标识');
                        $data['site_domain'] = isset($_POST['site_domain']) && trim($_POST['site_domain']) ? trim($_POST['site_domain']) : $this->error('请填写网站域名');
                        $data['collect_url'] = isset($_POST['collect_url']) && trim($_POST['collect_url']) ? trim($_POST['collect_url']) : '';
                        $data['type'] = isset($_POST['type']) && intval($_POST['type']) ? 1 : 0;
                        if ($_FILES['site_logo']['name'] != '') {
                                $upload_list = $this->_upload($_FILES['site_logo']);
                                $data['site_logo'] = $upload_list['0']['savename'];
                        } else {
                                $this->error('请上传网站LOGO');
                        }

                        $items_site_mod = D('items_site');
                        $result = $items_site_mod->add($data);
                        if ($result) {
                                $this->success(L('operation_success'), '', '', 'add');
                        } else {
                                $this->error(L('operation_failure'));
                        }
                }
                $this->display();
        }

        public function edit() {
                $items_site_mod = D('items_site');
                if (isset($_POST['dosubmit'])) {
                        $id = isset($_POST['id']) && intval($_POST['id']) ? intval($_POST['id']) : $this->error('参数错误');
                        $data['name'] = isset($_POST['name']) && trim($_POST['name']) ? trim($_POST['name']) : $this->error('请填写来源名称');
                        $data['alias'] = isset($_POST['alias']) && trim($_POST['alias']) ? trim($_POST['alias']) : $this->error('请填写唯一标识');
                        $data['site_domain'] = isset($_POST['site_domain']) && trim($_POST['site_domain']) ? trim($_POST['site_domain']) : $this->error('请填写网站域名');
                        $data['collect_url'] = isset($_POST['collect_url']) && trim($_POST['collect_url']) ? trim($_POST['collect_url']) : '';
                        $data['type'] = isset($_POST['type']) && intval($_POST['type']) ? 1 : 0;
                        if ($_FILES['site_logo']['name'] != '') {
                                $upload_list = $this->_upload($_FILES['site_logo']);
                                $data['site_logo'] = $upload_list['0']['savename'];
                        }
                        $result = $items_site_mod->where('id=' . $id)->save($data);
                        if (false !== $result) {
                                $this->success(L('operation_success'), '', '', 'edit');
                        } else {
                                $this->error(L('operation_failure'));
                        }
                }
                $id = isset($_GET['id']) && intval($_GET['id']) ? intval($_GET['id']) : $this->error('参数错误');
                $site_info = $items_site_mod->where('id=' . $id)->find();
                $this->assign('site_info', $site_info);
                $this->display();
        }

        public function delete() {
                if ((!isset($_GET['id']) || empty($_GET['id'])) && (!isset($_POST['id']) || empty($_POST['id']))) {
                        $this->error('请选择要删除的商品！');
                }
                $items_site_mod = D('items_site');
                if (isset($_POST['id']) && is_array($_POST['id'])) {
                        $ids = implode(',', $_POST['id']);
                        $items_site_mod->delete($ids);
                } else {
                        $id = intval($_GET['id']);
                        $items_site_mod->where('id=' . $id)->delete();
                }
                $this->success(L('operation_success'));
        }

        private function _upload($file) {
                import("ORG.Net.UploadFile");
                $upload = new UploadFile();
                //设置上传文件大小
                $upload->maxSize = 3292200;
                $upload->allowExts = explode(',', 'jpg,gif,png,jpeg');
                $upload->savePath = './data/author/';
                $upload->thumb = true;
                $upload->imageClassPath = 'ORG.Util.Image';
                $upload->thumbPrefix = '32_,120_';
                $upload->thumbMaxWidth = '32,120';
                $upload->thumbMaxHeight = '32,120';
                $upload->saveRule = uniqid;
                $upload->thumbRemoveOrigin = true;

                if (!$upload->uploadOne($file)) {
                        //捕获上传异常
                        $this->error($upload->getErrorMsg());
                } else {
                        //取得成功上传的文件信息
                        $uploadList = $upload->getUploadFileInfo();
                }
                return $uploadList;
        }

        public function taobaoapi() {
                $setting_mod = M('setting');
                if (isset($_POST['dosubmit'])) {
                        $taobao['usernick'] = isset($_POST['usernick']) && trim($_POST['usernick']) ? trim($_POST['usernick']) : $this->error('请填写帐号');
                        $taobao['pid'] = isset($_POST['pid']) && trim($_POST['pid']) ? trim($_POST['pid']) : $this->error('请填写pid');
                        $taobao['appkey'] = isset($_POST['appkey']) && trim($_POST['appkey']) ? trim($_POST['appkey']) : $this->error('请填写appkey');
                        $taobao['appsecret'] = isset($_POST['appsecret']) && trim($_POST['appsecret']) ? trim($_POST['appsecret']) : $this->error('请填写appsecret');
                        foreach ($taobao as $key => $val) {
                                $setting_mod->where("name='taobao_" . $key . "'")->save(array('data' => $val));
                        }
                        $this->success('修改成功', U('items_collect/taobaoapi'));
                }
                $res = $setting_mod->where("name='taobao_usernick' OR name='taobao_pid' OR name='taobao_appkey' OR name='taobao_appsecret'")->select();
                foreach ($res as $val) {
                        $taobaoset[$val['name']] = $val['data'];
                }
                $this->assign('taobao', $taobaoset);
                $this->display();
        }

        public function taobao_collect() {
                if (isset($_POST['dosubmit'])) {
                        $cate_id = isset($_POST['cate_id']) && intval($_POST['cate_id']) ? intval($_POST['cate_id']) : $this->error('请选择分类');
                        $keywords = isset($_POST['keywords']) && trim($_POST['keywords']) ? trim($_POST['keywords']) : $this->error('请填写关键词');
                        $pages = isset($_POST['pages']) && intval($_POST['pages']) ? intval($_POST['pages']) : 1;
                        $this->redirect('items_collect/taobao_collect_jump', array('cate_id' => $cate_id, 'keywords' => $keywords, 'pages' => $pages));
                }
                //获取分类
                $cate_id = isset($_GET['cate_id']) && intval($_GET['cate_id']) ? intval($_GET['cate_id']) : $this->error('请选择分类');
                $cate_name = isset($_GET['cate_name']) && trim($_GET['cate_name']) ? trim($_GET['cate_name']) : '';
                $this->assign('cate_id', $cate_id);
                $this->assign('cate_name', $cate_name);
                $this->display();
        }

        public function taobao_batch_collect_jump() {
                $tags_cate_mod = D('items_tags_cate');
                $tags_mod = D('items_tags');
                $items_cate_mod = D('items_cate');
                $items_site_mod = D('items_site');
                $collect_taobao_mod = D('collect_taobao');

                $cate = isset($_REQUEST['cate']) ? explode(',', $_REQUEST['cate']) : $this->error('请选择分类');
                $index = isset($_REQUEST['cate_index']) ? intval('cate_index') : 0;
                //$pages =5;

                $cate_id = $cate[$index];
                $tags_cate = $tags_cate_mod->where('cate_id=' . $cate_id)->select();
                //print_r($tags_cate_mod->getLastSql());
                //print_r($tags_cate);exit;
                /*
                  foreach ($tags_cate as $tkey=>$tval){
                  $keyword.=$tags_mod->where('id='.$tval['tag_id'])->getField('name')."  ";
                  }
                 */
                $keywords = $items_cate_mod->where('id=' . $cate_id)->find();
                //print_r($keyword);exit;
                //$p = isset($_GET['p']) && intval($_GET['p']) ? intval($_GET['p']) : 1;//当前页

                $tb_top = $this->taobao_client();
                $req = $tb_top->load_api('TaobaokeItemsGetRequest');
                $req->setFields("num_iid,title,nick,pic_url,price,click_url,shop_click_url,seller_credit_score,item_location,volume");
                $req->setPid($this->setting['taobao_pid']);
                $req->setKeyword('男装');
                $req->setPageNo(1);
                $req->setPageSize(40);
                $resp = $tb_top->execute($req);
                $goods_list = (array) $resp->taobaoke_items;
                //print_r($goods_list);exit;

                $sid = $items_site_mod->where("alias='taobao'")->getField('id');

                $items_nums = 0;
                foreach ($goods_list['taobaoke_item'] as $item) {
                        $item = (array) $item;
                        $item['item_key'] = 'taobao_' . $item['num_iid'];
                        $item['sid'] = $sid;
                        $this->_collect_insert($item, $cate_id);
                        $items_nums++;
                }
                //更新分类表商品数
                if ($items_nums > 0) {
                        $items_cate_mod->where('id=' . $cate_id)->setInc('item_nums', $items_nums);
                }

                if ($key >= count($cate)) {
                        //记录采集时间
                        $islog = $collect_taobao_mod->where('cate_id=' . $cate_id)->count();
                        if ($islog) {
                                $collect_taobao_mod->save(array('cate_id' => $cate_id, 'collect_time' => time()));
                        } else {
                                $collect_taobao_mod->add(array('cate_id' => $cate_id, 'collect_time' => time()));
                        }
                        $this->collect_success('采集完成', '', 'collect');
                } else {
                        $this->collect_success('第 <em class="blue">' . $index . '</em> 个分类，开始采集下一页', U('items_collect/taobao_batch_collect_jump', array('cate' => implode(',', $cate), 'cate_index' => $index + 1)));
                }
        }

        public function taobao_collect_jump() {
                $cate_id = isset($_GET['cate_id']) && intval($_GET['cate_id']) ? intval($_GET['cate_id']) : $this->error('请选择分类');
                $keywords = isset($_GET['keywords']) && trim($_GET['keywords']) ? trim($_GET['keywords']) : $this->error('请填写关键词');
                $pages = isset($_GET['pages']) && intval($_GET['pages']) ? intval($_GET['pages']) : 1;

                $p = isset($_GET['p']) && intval($_GET['p']) ? intval($_GET['p']) : 1; //当前页
                $items_cate_mod = D('items_cate');
                $items_site_mod = D('items_site');
                $collect_taobao_mod = D('collect_taobao');
                $tb_top = $this->taobao_client();
                $req = $tb_top->load_api('TaobaokeItemsGetRequest');
                $req->setFields("num_iid,title,nick,pic_url,price,click_url,shop_click_url,seller_credit_score,item_location,volume");
                $req->setPid($this->setting['taobao_pid']);
                $req->setKeyword($keywords);
                $req->setPageNo($p);
                $req->setPageSize(40);
                $resp = $tb_top->execute($req);
                $goods_list = (array) $resp->taobaoke_items;
                //print_r($goods_list);exit;

                $sid = $items_site_mod->where("alias='taobao'")->getField('id');

                $items_nums = 0;
                foreach ($goods_list['taobaoke_item'] as $item) {
                        $item = (array) $item;
                        $item['item_key'] = 'taobao_' . $item['num_iid'];
                        $item['sid'] = $sid;
                        $this->_collect_insert($item, $cate_id);
                        $items_nums++;
                }
                //更新分类表商品数
                if ($items_nums > 0) {
                        $items_cate_mod->where('id=' . $cate_id)->setInc('item_nums', $items_nums);
                }

                if ($p >= $pages) {
                        //记录采集时间
                        $islog = $collect_taobao_mod->where('cate_id=' . $cate_id)->count();
                        if ($islog) {
                                $collect_taobao_mod->save(array('cate_id' => $cate_id, 'collect_time' => time()));
                        } else {
                                $collect_taobao_mod->add(array('cate_id' => $cate_id, 'collect_time' => time()));
                        }
                        $this->collect_success('采集完成', '', 'collect');
                } else {
                        $this->collect_success('第 <em class="blue">' . $p . '</em> 页采集完成，开始采集下一页，共 <em class="blue">' . $pages . '</em> 页', U('items_collect/taobao_collect_jump', array('cate_id' => $cate_id, 'keywords' => $keywords, 'pages' => $pages, 'p' => $p + 1)));
                }
        }

        public function collect_success($message, $jump_url, $dialog='') {
                $this->assign('message', $message);
                if (!empty($jump_url))
                        $this->assign('jump_url', $jump_url);
                if (!empty($dialog))
                        $this->assign('dialog', $dialog);
                $this->display(APP_PATH . 'Tpl/' . C('DEFAULT_THEME') . '/items_collect/collect_success.html');
                exit;
        }

        private function _collect_insert($item, $cate_id) {
                $items_mod = D('items');
                $items_tags_mod = D('items_tags');
                $items_tags_item_mod = D('items_tags_item');

                //需要判断商品是否已经存在
                $isset = $items_mod->where("item_key='" . $item['item_key'] . "'")->getField('id');
                if ($isset) {
                        return;
                }
                $add_time = time();
                $item_id = $items_mod->add(array(
                            'title' => strip_tags($item['title']),
                            'cid' => $cate_id,
                            'sid' => $item['sid'],
                            'item_key' => $item['item_key'],
                            'img' => $item['pic_url'] . '_210x1000.jpg',
                            'simg' => $item['pic_url'] . '_64x64.jpg',
                            'bimg' => $item['pic_url'],
                            'price' => $item['price'],
                            'url' => $item['click_url'],
                            'likes' => $item['volume'],
                            'haves' => $item['volume'],
                            'add_time' => $add_time,
                        ));
                //处理标签
                $tags = $items_tags_mod->get_tags_by_title(strip_tags($item['title']));
                if ($tags) {
                        $tags = array_unique($tags);
                        foreach ($tags as $tag) {
                                $isset_id = $items_tags_mod->where("name='" . $tag . "'")->getField('id');
                                if ($isset_id) {
                                        $items_tags_mod->where('id=' . $isset_id)->setInc('item_nums');
                                        $items_tags_item_mod->add(array(
                                            'item_id' => $item_id,
                                            'tag_id' => $isset_id
                                        ));
                                } else {
                                        $tag_id = $items_tags_mod->add(array('name' => $tag));
                                        $items_tags_item_mod->add(array(
                                            'item_id' => $item_id,
                                            'tag_id' => $tag_id
                                        ));
                                }
                        }
                }
        }

        public function collect() {
                if (isset($_REQUEST['dosubmit'])) {
                        $cate = implode(',', $_REQUEST['cate']);

                        header("location:" . U('items_collect/taobao_batch_collect_jump?act=batch&cate=' . $cate));
                        exit;
                }
                $code = isset($_REQUEST['code']) ? trim($_REQUEST['code']) : $this->error('参数错误');
                $items_cate_mod = D('items_cate');
                switch ($code) {
                        case 'taobao':
                                //显示采集过的分类和时间
                                $result = $items_cate_mod->join("LEFT JOIN " . C('DB_PREFIX') . "collect_taobao as ct ON ct.cate_id=" . C('DB_PREFIX') . "items_cate.id")->select();
                                foreach ($result as $val) {
                                        if ($val['pid'] == 0) {
                                                $items_cate_list['parent'][$val['id']] = $val;
                                        } else {
                                                $items_cate_list['sub'][$val['pid']][] = $val;
                                        }
                                }
                                $this->assign('items_cate_list', $items_cate_list);
                                break;
                        case 'mogujie':
                                //提示采集器
                                break;
                        case 'meilishuo':
                                //提示采集器
                                break;
                }
                $this->assign('code', $code);
                $this->display();
        }

}

?>